/*  

Cafechess Library: Cover basic chess programming needs, like GUI, Engine integration, 
FEN and PGN parsing.

                 \\|//
                 (o o)
--------------ooO-(_)-Ooo----------------------------------
Copyright (C) 2009  By Gregory A. Prentice Snoqualmie, WA
                    www.cafechess.org
                    cafechess@comcast.net
                      Oooo
--------------oooO----(  )---------------------------------
              (  )    (_/
               \_)

Microsoft Public License (Ms-PL)
               
Revisions:

Author        Date    Description:

*/
using System;

namespace Cafechess.Chess.Engines
{
  public interface IChessEngineEvents
  {
    void MakeMove(object sender, System.EventArgs e);
    void Analysis(object sender, System.EventArgs e);
    void Information(object sender, System.EventArgs e);
    void Error(object sender, System.EventArgs e);
    void IllegalMove(object sender, System.EventArgs e);
    void Results(object sender, System.EventArgs e);
    void OfferDraw(object sender, System.EventArgs e);
    void TellOpponent(object sender, System.EventArgs e);
    void TellOthers(object sender, System.EventArgs e);
    void TellAll(object sender, System.EventArgs e);
    void TellUser(object sender, System.EventArgs e);
    void TellUserError(object sender, System.EventArgs e);
    void TellIcs(object sender, System.EventArgs e);
    void TellIcsNoAlias(object sender, System.EventArgs e);
    void AskUser(object sender, System.EventArgs e);
  }

  public interface IChessEngine
  {
    void Start();
    void Stop();
    void Analyze(bool turnOn);
    void Ponder(bool turnOn);
    void AddEvents(IChessEngineEvents ievents);
    void RemoveEvents(IChessEngineEvents ievents);
    void SetBoard(string fenPosition);
    void Move(string move);
    void Force();
    bool IsRunning();
    bool IsAnalyzing();
    void NewGame();
    string EngineName
    {
      set;
      get;
    }
    string SetBoardFormat
    {
      set;
      get;
    }
  }
}
